/***************************************************************************
 *   Copyright (C) 2009 by Marcin Swiechowicz   *
 *   marcin.swiechowicz@gmail.com   *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/
#ifndef KDCMPLAYERMENCODERJOB_H
#define KDCMPLAYERMENCODERJOB_H

#include "kdcabstractkprocessjob.h"

#include <QByteArray>

typedef struct KDCMPlayerFileInfo
{
	int vID;
	int aID;
	QString demuxer;
	int nch;
	int length;
	int vBitrate;
	int aBitrate;
	double ar;
	double fps;
	int width;
	int height;
	int srate;
	QString aFormat;
	QString vFormat;
};

class QTimerEvent;

class KDCMPlayerMencoderJob: public KDCAbstractKProcessJob
{
Q_OBJECT
public:
	enum Mode { MPlayer, MEncoder };
	KDCMPlayerMencoderJob( KDCMPlayerMencoderJob::Mode mode, QObject *parent = 0 );
	virtual ~KDCMPlayerMencoderJob();
	void start();
	void setFiles( const QStringList& files );
	void setFile( const QString& file );
	bool isRunning();
	void write( const QString& str );
	const KDCMPlayerFileInfo info() const;
	int currentTime() const;
	bool isPause();
	int currentMovie() const;
	void setCurrentMovie( int id );
signals:
	void cropped( int, int, int, int );
	void timeChanged( int );
	void foundAudioStream( int id );
public slots:
	void pause();
	void restart();
	void unpause();
	void forcePause();
	void stop();
	void setSeek( int value );
	void playNext( int id = 1 );
	void playPrev( int id = 1 );
	void changeAudioID( int id );
	void changeVideoDriver( const QString& );
protected slots:
	void processFinished( int , QProcess::ExitStatus );
	void readyReadProcessOutput(); // for mplayer
	void readyReadMencoderProcessOutput(); // for mencoder
	void timerEvent( QTimerEvent *event );
private:
	void readyReadMPlayerInfoProcessOutput( QByteArray& data );
private:
	QStringList p_files;
	KDCMPlayerMencoderJob::Mode p_mode;
	KDCMPlayerFileInfo p_info;
	int p_curSec;
	int p_id;
	int p_timerID;
};
#endif
